﻿// -------------------------------------------------------------------------
//    @FileName         :    NFBagPageInterfacePackage.h
//    @Author           :    gaoyi
//    @Date             :    2024/12/24
//    @Email            :    445267987@qq.com
//    @Module           :    NFBagPageInterfacePackage
//
// -------------------------------------------------------------------------

// --- 文件总结 ---------------------------------------------------------------
// `NFBagPageInterfacePackage` 是“背包”页签的接口实现：
// - ItemCanAdd：依据物品配置与页签类型判断可否放入
// - GetErrCodeWhenFull：背包满的统一错误码
// - SetItem/OnCommitAfter：沿用基类行为
// ---------------------------------------------------------------------------

#pragma once

#include "NFComm/NFCore/NFPlatform.h"
#include "NFBagPageInterfaceBase.h"

/**
 * @brief 背包页签接口实现类
 * "背包"页签的接口实现，包含 ItemCanAdd 规则和满包错误码
 */
class NFBagPageInterfacePackage : public NFBagPageInterfaceBase
{
public:
    /**
     * @brief 构造函数
     * @param pBagPage 背包页签指针
     */
    NFBagPageInterfacePackage(NFBagPage* pBagPage);
    
    /**
     * @brief 析构函数
     */
    virtual ~NFBagPageInterfacePackage();
public:
    /**
     * @brief 设置物品到指定格子
     * @param pBagPageOp 背包页签操作器
     * @param iGridIndex 格子索引
     * @param pItem 要设置的物品
     * @param bPreCheckFlag 是否为预检查模式
     * @return 0成功，非0失败
     */
    int SetItem(const ::NFBagPageOp* pBagPageOp, int iGridIndex, const ::NFGridItem* pItem, bool bPreCheckFlag) override;
    
    /**
     * @brief 提交后回调
     * @param pBagPageOp 背包页签操作器
     * @return 0成功，非0失败
     */
    int OnCommitAfter(const ::NFBagPageOp* pBagPageOp) override;
    
    /**
     * @brief 判断是否可以添加物品（依据物品配置与页签类型判断）
     * @param stWillAddItemData 待添加物品数据
     * @param bCanAdd 输出是否可以添加
     * @return 0成功，非0失败
     */
    int ItemCanAdd(const WillAddItemData& stWillAddItemData, bool& bCanAdd) override;
    
    /**
     * @brief 获取背包满时的错误码
     * @param iErrCode 输出错误码
     * @return 0成功，非0失败
     */
    int GetErrCodeWhenFull(int& iErrCode) override;
    
    /**
     * @brief 判断是否为指定角色的物品
     * @param ullRoleID 角色ID
     * @return true是，false否
     */
    bool IsOwner(uint64_t const ullRoleID) const override {return true;};
};